/*
 * @Date: 2024-11-11 09:19:24
 * @Author: LiSong
 * @LastEditors: LiSong
 * @LastEditTime: 2024-11-18 10:45:29
 * @Description: 获取操作js主入口
 */

/*
  目录结构说明：
    @/handler/modules/base/reserve/handler-zxpssb.js

    modules: 操作模块
      base 基础的、通用的操作方法
      ad** 表示对应的区划个性化操作方法
    utils: 工具类方法
    
 */

/**
 * 动态获取操作方法的方法
 *  优先获取特定环境的文件，如果不存在则获取基本目录中的文件
 * 
 * @param {String} handler 操作的文件名，格式[dir]-[name] dir:所属文件目录 name:具体文件名
 * @param {Object} params 参数信息
 * @returns Promise
 */
export const getHandler = (handler, params) => {
  return new Promise(async (resolve, reject) => {
    handler = analysisHandler(handler)
    if (!handler) {
      console.error('未找到目标文件，请检查文件配置信息是否正确！')
      resolve(null)
    }
    const { dir, env, name } = handler
    try {
      const module = await import(`./modules/${env}/${dir}/handler-${name}.js`)
      resolve(module.default)
    } catch(error) {
      try {
        const module = await import(`./modules/base/${dir}/handler-${name}.js`)
        resolve(module.default)
      } catch(error) {
        console.error('未找到目标文件，请检查文件配置信息是否正确！', error)
        resolve(null)
      }
    }
  })
}
// 环境标识
const envMode = import.meta.env.MODE
/**
 * 解析操作配置
 * 
 * @param {String} handler 操作配置
 * @returns {Object} 解析后的操作数据 {
 *  dir: 所在的目录
 *  env: 环境标识
 *  name: 具体的目标操作名称
 * }
 */
const analysisHandler = (handler) => {
  if (!handler) return null
  const [ dir, name ] = handler.split('-')
  const env = envMode.startsWith('ad') ? envMode : 'base'
  return {
    dir, env, name
  }
}
